package banco.dados;

import banco.negocio.Cliente;

public class RepositorioClientesArray implements RepositorioClientes {
	private Cliente[] clientes;
	private int indice;

	public RepositorioClientesArray() {
		indice = 0;
		clientes = new Cliente[20];
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see RepositorioClientes#atualizar(Cliente)
	 */
	public void atualizar(Cliente cliente) {
		int i = procurarIndice(cliente.getCpf());
		if (i != -1) {
			clientes[i] = cliente;
		} else {
			throw new RuntimeException("Conta nao encontrada");
		}
	}

	private void aumentaArraySeNecessario() {
		if (indice == clientes.length) {
			Cliente[] clientesTmp = new Cliente[clientes.length * 2];
			for (int i = 0; i < clientes.length; i++) {
				clientesTmp[i] = clientes[i];
			}
			clientes = clientesTmp;
		}
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see RepositorioClientes#existe(java.lang.String)
	 */
	public boolean existe(String cpf) {
		boolean resp = false;

		int i = this.procurarIndice(cpf);
		if (i != -1) {
			resp = true;
		}

		return resp;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see RepositorioClientes#inserir(Cliente)
	 */
	public void inserir(Cliente novoCliente) {
		aumentaArraySeNecessario();

		clientes[indice] = novoCliente;
		indice = indice + 1;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see RepositorioClientes#procurar(java.lang.String)
	 */
	public Cliente procurar(String cpf) {
		Cliente resp = null;
		int i = this.procurarIndice(cpf);
		if (i != -1) {
			resp = clientes[i];
		} else {
			throw new RuntimeException("Cliente nao encontrado");
		}

		return resp;
	}

	private int procurarIndice(String cpf) {
		int i = 0;
		int resp = -1;
		boolean achou = false;

		while ((i < indice) && !achou) {
			if ((clientes[i].getCpf()).equals(cpf)) {
				resp = i;
				achou = true;
			}
			i = i + 1;
		}
		return resp;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see RepositorioClientes#remover(java.lang.String)
	 */
	public void remover(String cpf) {
		int i = this.procurarIndice(cpf);
		if (i != -1) {
			clientes[i] = clientes[indice - 1];
			clientes[indice - 1] = null;
			indice = indice - 1;
		} else {
			throw new RuntimeException("Cliente nao encontrado");
		}
	}
}